package com.hrcx.mystery.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.hrcx.mystery.common.PageParamRequest;
import com.hrcx.mystery.dto.*;
import com.hrcx.mystery.dto.admin.NewMysteryDto;
import com.hrcx.mystery.dto.admin.UpdateMysteryDto;
import com.hrcx.mystery.pojo.EbMystery;
import com.hrcx.mystery.pojo.EbMysteryMerchandiseAssociated;
import com.hrcx.mystery.vo.EbMysteryMerchandiseAssociatedVo;
import com.hrcx.mystery.vo.EbMysteryVo;
import com.hrcx.mystery.vo.EbStoreProductVo;
import com.hrcx.mystery.vo.MysteryHistoryVo;

import java.util.List;


/**
 * @author LinXiPeng
 */
public interface EbMysteryService extends IService<EbMystery> {
    /**
     * 获取盲盒列表
     *
     * @param searchRequest    搜索请求参数
     * @param pageParamRequest 分页请求参数
     * @return 符合条件的盲盒列表
     */
    PageInfo<EbMysteryVo> getMysteryList(MysterySearchDto searchRequest, PageParamRequest pageParamRequest);

    /**
     * 获取盒子内的商品列表
     *
     * @param bid 附属盒子的编号
     * @return 商品列表
     */
    List<EbMysteryMerchandiseAssociatedVo> getMysteryProdList(Integer bid);

    /**
     * 开盲盒
     *
     * @param openRequest 开盒请求参数封装类
     * @return 抽到的奖品集合
     */
    List<EbMysteryMerchandiseAssociatedVo> openMystery(MysteryOpenDto openRequest);

    /**
     * 收藏/取消盲盒
     *
     * @param bid 盲盒编号
     * @return 是否收藏或取消成功
     * @since 2021年12月9日
     */
    Boolean collect(Integer bid);

    /**
     * 回收奖品
     *
     * @param recyclePrizeRequest 回收请求参数
     * @return 是否回收成功
     */
    Boolean recyclePrize(MysteryRecyclePrizeDto recyclePrizeRequest);

    /**
     * 创建新盲盒
     *
     * @param newMysteryDto 新的盲盒对象
     * @return 创建是否成功
     */
    Boolean creatMystery(NewMysteryDto newMysteryDto);

    /**
     * 更改盲盒状态
     *
     * @param mysteryJson 盲盒json对象
     * @return 是否更改成功
     */
    Boolean changeMysteryStatus(String mysteryJson);

    /**
     * 重置盲盒奖池累计
     *
     * @param mysteryJson 盲盒json对象
     * @return 重置是否成功
     */
    Boolean resetMysteryPond(String mysteryJson);

    /**
     * 更新盲盒
     *
     * @param updateMysteryDto 更新对象
     * @return 更新是否成功
     */
    Boolean updateMystery(UpdateMysteryDto updateMysteryDto);

    /**
     * 获得商家的所有商品
     *
     * @param merchantProductsSearchDto 商品搜索请求对象
     * @param pageParamRequest          分页参数对象
     * @return 商品响应对象
     */
    PageInfo<EbStoreProductVo> getMerchantProduct(MerchantProductsSearchDto merchantProductsSearchDto, PageParamRequest pageParamRequest);

    /**
     * 插入奖品进入盲盒
     *
     * @param associatedList 奖品集合
     * @param id             盲盒编号
     * @return 是否成功
     */
    Boolean insertProduct(List<EbMysteryMerchandiseAssociated> associatedList, Integer id);

    /**
     * 更新奖品
     *
     * @param mysteryMerchandiseAssociated 奖品对象
     * @return 更新是否成功
     */
    Boolean updatePrize(EbMysteryMerchandiseAssociated mysteryMerchandiseAssociated);

    /**
     * 获取当前用户的所有符合条件的开盒历史记录
     *
     * @param searchDto        请求参数封装对象
     * @param pageParamRequest 分页参数对象
     * @return 历史记录封装响应对象
     */
    PageInfo<MysteryHistoryVo> getMysteryHistory(HistorySearchDto searchDto, PageParamRequest pageParamRequest);
}
